home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_400 / 428_02 / examples / compress.c < prev    next >
C/C++ Source or Header  |  1994-03-13  |  2KB  |  65 lines

  1. /*
  2. ** COMPRESS.C: Compresses a text file. Use UNCOMP.C to
  3. ** restore to original form.
  4. */
  5.  
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include <compress.h>
  9.  
  10. BYTE inbuff[BUFSIZ];
  11. BYTE outbuff[BUFSIZ + 200];
  12.  
  13. void main(int argc,char *argv[])
  14. {
  15.    FILE *istream,*ostream;
  16.    WORD complen,uncomplen;
  17.    NODE *rootnode;
  18.  
  19.    /* check arguments */
  20.    if(argc != 3 || !stricmp(argv[1],argv[2])) {
  21.       printf("Usage:\tCOMPRESS <infile> <outfile>\n");
  22.       return;
  23.    }
  24.  
  25.    /* open files */
  26.    istream = fopen(argv[1],"rt");
  27.    ostream = fopen(argv[2],"wb");
  28.    if(istream == NULL || ostream == NULL) {
  29.       printf("File error\n");
  30.       return;
  31.    }
  32.  
  33.    /* build compression code tree */
  34.    rootnode = gettree(istream);
  35.    if(rootnode == NULL) {
  36.       printf("Out of memory\n");
  37.       return;
  38.    }
  39.  
  40.    /* set file pointer back to beginning of file */
  41.    rewind(istream);
  42.  
  43.    /* write compressed code tree to file */
  44.    complen = writetree(rootnode,outbuff);
  45.    putw(complen,ostream);
  46.    fwrite(outbuff,sizeof(BYTE),complen,ostream);
  47.  
  48.    /* compress data and write to output file */
  49.    do {
  50.       uncomplen = fread(inbuff,sizeof(BYTE),BUFSIZ,
  51.          istream);
  52.       complen = compress(inbuff,uncomplen,outbuff,
  53.          rootnode);
  54.       putw(uncomplen,ostream);
  55.       putw(complen,ostream);
  56.       fwrite(outbuff,sizeof(BYTE),complen,ostream);
  57.    } while(uncomplen == BUFSIZ);
  58.  
  59.    /* indicate end of file */
  60.    putw(0x00,ostream);
  61.  
  62.    fclose(istream);
  63.    fclose(ostream);
  64. }
  65.